為什麼要設置環境變數?一般軟體開發專案,會將環境設置成:Production 正式產品環境、 Staging 準正式環境、Development 開發環境、Testing 測試環境,讓開發時能更方便的去測試與維護。今天要分享的是如何將環境變數帶入至 React Native 專案中,並且整理好相關 script 讓你可以一鍵開啟相對應的環境。
npm install react-native-config
or
yarn add react-native-config
這邊要留意的是如果你安裝的 React Native 版本是 0.60 以下,則需要加上
react-native link react-native-config
android/app/build.gradle
中,apply plugin:"com.android.application"
下方加入:apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
cd ios && pod install && cd ../
or
npx pod-install
在專案根目錄分別加入不同環境變數的檔案,在檔案中加入你想管理的環境變數。
android/app /build.gradle
中,定義好每個環境的 env 檔案。找到 apply plugin:"com.android.application"
下方加入:apply plugin: "com.android.application"
// Environment configuration files
project.ext.envConfigFiles = [
productiondebug: ".env.production", //正式環境的 debug 版本 app
productionrelease: ".env.production",//正式環境的 release 版本 app
developmentrelease: ".env.development",//開發環境的 release 版本 app
developmentdebug: ".env.development",//開發環境的 debug 版本 app
stagingrelease: ".env.staging",//準正式環境的 release 版本 app
stagingdebug: ".env.staging"//準正式環境的 debug 版本 app
]
// Load environment configuration
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
再往下方找到
compileSdkVersion rootProject.ext.compileSdkVersion
在其下方加入:
// Define all product flavors
flavorDimensions "default"
productFlavors {
production {
// Define the minimum SDK version for this product flavor
minSdkVersion rootProject.ext.minSdkVersion
// Define the application id for this product flavor
applicationId "com.yourappid" // 你的 app id
// Define the target SDK version for this product flavor
targetSdkVersion rootProject.ext.targetSdkVersion
// Define the package name for this product flavor
resValue "string", "build_config_package", "com.yourappid"
}
staging {
minSdkVersion rootProject.ext.minSdkVersion
applicationId "com.yourappid"
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.yourappid"
applicationIdSuffix ".staging"
}
development {
minSdkVersion rootProject.ext.minSdkVersion
applicationId "com.yourappid"
targetSdkVersion rootProject.ext.targetSdkVersion
resValue "string", "build_config_package", "com.yourappid"
applicationIdSuffix ".development"
}
}
再往下找到 buildTypes
新增以下:
buildTypes {
debug {
signingConfig signingConfigs.debug
matchingFallbacks = ['debug', 'release'] //新增這行
}
release {
.....
}
}
android/app/src/main
資料夾到 android/app/src
,資料夾分別改名 development 和 staging 並且刪除裡面的 java 資料夾(main 就是正式環境,所以 production 不需額外複製)(2).依照環境設定不同的 app 名稱
根據以下路徑 android/app/src/development/res/values/strings.xml
<resources>
<string name="app_name">project.dev</string> // 填入 app 名稱
</resources>
3.設定 script 指定檔
在 package.json
設定 script,這樣我們就可以一鍵打開不同環境的應用程式了。
{
"android:staging": "react-native run-android --mode=stagingdebug",
"android:staging-release": "react-native run-android --mode=stagingrelease",
"android:dev": "npx react-native run-android --mode=developmentdebug --appIdSuffix development",
"android:dev-release": "npx react-native run-android --mode=developmentrelease --appIdSuffix development",
"android:prod": "npx react-native run-android --mode=productiondebug",
"android:prod-release": "npx react-native run-android --mode=productionrelease"
}
yarn android
如此一來便可在模擬器上同時開啟三種環境的 app 不會混淆了~
import Config from 'react-native-config';
const DOMAIN = Config.API_URL;
最後分別輸入:
yarn android:dev
yarn android:prod
yarn android:staging
就可以隨心所欲地切換環境了~
請問筆者以前對JAVA跟Android開發有經驗嗎~?
這部分著墨好多要去修改原生部分的檔案XD
有點神奇又很有幫助。
其實沒有過相關的經驗,但確實花了很多時間在爬文理解,不然原生的部分我也是完全看不懂的,我本身的背景是文組轉職網頁前端,至於為什麼碰 RN 那又是另外一個故事了 XD
收下我的膝蓋
想請問筆者知道
經過這樣雖然能在本地切換三種不同環境
有經驗於Google Play Console上
針對正式版與開發版(內部測試版) 同時安裝在手機上嗎?